package leetCode.offer20;

public class Solution2 implements Solution{


    @Override
    public boolean isNumber(String s) {
        s = s.trim();
        if(s.length()==0) return false;
        int eIndex = -1;
        for(int i=0;i<s.length();i++) {
            char a = s.charAt(i);
            if((a>='a'&&a<='z')||(a>='A'&&a<='Z')) {
                if(a!='e'&&a!='E') return false;
                else if(eIndex==-1){
                    eIndex = i;
                }
                else return false;
            }
        }

        if(s.length()==1) {
            if(eIndex==0||s.equals(".")) return false;
        }

        //存在e
        if(eIndex>0){
            return ((isInt(s.substring(0,eIndex))||isFloat(s.substring(0,eIndex)))
                    &&isInt(s.substring(eIndex+1)));
        }
        //不存在e
        else{
            return (isInt(s)||isFloat(s));
        }
    }

    /**
     * 是否是整数
     * @param s
     * @return
     */
    public boolean isInt(String s){
        if(s.length()==0) return false;
        if(s.contains(".")) return false;
        if(s.length()==1){
            return s.charAt(0) >= '0' && s.charAt(0) <= '9';
        }
        for(int i=0;i<s.length();i++) {
            char a = s.charAt(i);
            if(i==0){
                if((a>='0'&&a<='9')||a=='-'||a=='+'){
                    continue;
                }else return false;
            }
            if(a>='0'&&a<='9'){

            }else return false;
        }
        return true;
    }

    /**
     * 是否是浮点数,浮点数最少2位
     * @param s
     * @return
     */
    public boolean isFloat(String s) {
        if(s.length()<=1) return false;
        if(!s.contains(".")) return false;
        boolean hasPoint = false;
        if(s.length()==2&&s.contains("-")&&s.contains(".")) return false;
        for(int i=0;i<s.length();i++){
            char a = s.charAt(i);
            if(i==0){
                if((a>='0'&&a<='9')||a=='-'||a=='+'){
                }else if(a=='.'){
                    hasPoint = true;
                }else return false;
            }else if(a>='0'&&a<='9'){

            }else if(a == '.' &&!hasPoint){
                hasPoint = true;
            }else return false;
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println(new Solution2().isNumber(".e1"));
    }
}
